//
//  main.m
//  02-Foundation-NSString
//
//  Created by Jason on 15/9/24.
//  Copyright © 2015年 Jason. All rights reserved.
//

#import <Foundation/Foundation.h>

void stringCreate();
void stringSearch();
void stringSub();
void stringUse();
void stringExport();


int main(int argc, const char * argv[]) {
    @autoreleasepool {
       
//        stringCreate();
//        stringSearch();
//        stringSub();
//        stringUse();
        stringExport();
        
        NSString *str = @"123";
        [str intValue]; // 转换成int类型
        
        NSString *str1 = @"123";
        char *name  = [str1 UTF8String];// 转换成C语言字符串
        
        
        
    }
    return 0;
}

#pragma mark 字符串的导出
void stringExport() {
    
    NSString *str = @"haha黑恶萨克的\n啊商家大恒科技啊好多\n1232134";
    
    NSString *path = @"/Users/hezhiyong/Desktop/abc.txt";
    NSError *error = nil;
    // 如果文件夹不存在, 会写入失败
    // 如果文件夹存在, 文件不存在,会自动穿件文件
    // 每次写入都会覆盖以前的内容
    // atomically: YES 原子性操作. 全部内容写入才会产生新的内容.如果中途写入失败,就会回滚操作
        // NO 非原子性 写多少算多少
    [str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error];
    if(error) {// 有错误信息
        NSLog(@"写入失败:\n%@",[error localizedDescription]);
    } else {// 没有错误信息
        NSLog(@"写入成功");
    }
    
}

#pragma mark 字符串
void stringUse() {
    
    NSString *name = @"Jason";
    NSString *name2 = @"Jim";
    
    // 比较内容是否相同,不比较内存地址值
//    BOOL e = [name isEqualToString:name2];
    
    NSComparisonResult result = [name compare:name2];
    if(result == NSOrderedSame) {
        NSLog(@"name和name2内容一样");
    } else if(result == NSOrderedAscending) {
        // 右边的字符串比左边大 name2 比 name 大
        NSLog(@"name2 比 name大");
    } else {
        NSLog(@"name 比 name2 大");
    }
    
    
    /*
     大小写处理
    NSString *str1 = @"tabsASDdd";
    NSLog(@"大写=%@",[str1 uppercaseString]);
    NSLog(@"小写=%@",[str1 lowercaseString]);
    */
    
    /*
    // 1.第一次创建的字符串内存泄露,没有释放
    // 2.第二次创建的字符串会释放过渡
    NSString *str2 = [[NSString alloc] initWithString:@"123123"];
    
    str2 = @"123123a";
    
    [str2 release];
     
     */
    
    
    NSString *str = @"qq=1234";
    
    NSString *qq  = [str substringFromIndex:3];
    
    NSLog(@"str=%@", str);
    NSLog(@"QQ=%@", qq);
    
}

#pragma mark 字符串截取
void stringSub() {
    
    NSString *str = @"http://im.qq.com?QQ=123&pwd=456";
    // 先计算QQ=的方位
    NSRange qqRange = [str rangeOfString:@"QQ="];
    NSLog(@"%@", NSStringFromRange(qqRange));
    // QQ号码的开始位置
    NSUInteger location =  qqRange.location + qqRange.length;
    // QQ号码的长度 = &的位置 - QQ号码开始的位置
    NSUInteger length = [str rangeOfString:@"&"].location - location;
    NSString *qq = [str substringWithRange:NSMakeRange(location, length)];
    NSLog(@"QQ=%@", qq);
    
    // 截取密码长度
    NSRange pwdRange = [str rangeOfString:@"pwd="];
    NSLog(@"%@", NSStringFromRange(pwdRange));
    NSUInteger pwdLocation = pwdRange.location + pwdRange.length;
    NSUInteger pwdLength = str.length - pwdLocation;
//    NSString *pwd = [str substringWithRange:NSMakeRange(pwdLocation, pwdLength)];
    // 从某个位置开始,一直截取到字符串的结尾
    NSString *pwd = [str substringFromIndex:pwdLocation];
    
    // 从字符串的首位置开始,一直截取到字符串的某个位置
    [str substringToIndex:10];
    
    NSLog(@"pwd=%@", pwd);
    
}


#pragma mark 字符串搜索
void stringSearch() {
    /*
     qq:   ....
     密码:  ....
     */
    NSString *str = @"http://im.qq.com?QQ=123456&pwd=123456";
    // 搜索QQ=在str中的范围
    NSRange range = [str rangeOfString:@"QQ="];
    NSLog(@"%@", NSStringFromRange(range)); // {17, 3}  从字符串17开始 长度是3
    
    // 如果找不到对应的字符串, length返回0, location=NSNotFound
    NSRange range2 = [str rangeOfString:@"https://"];
    NSLog(@"%@", NSStringFromRange(range2)); // {9223372036854775807, 0}
    
    /*
    if(range2.length == 0) {
        NSLog(@"https://找不到");
    }
     */
    
    // 与上面方法类似
    // 如果包含http这个前缀, 就返回YES（1）,否则返回NO（0）
    BOOL hasP = [str hasPrefix:@"http"]; // hasPrefix 是否以xxx开头
    
    NSLog(@"%d",hasP);
    // 是否以123456结尾
    [@"abc.txt" hasSuffix:@".txt"];
    
    
}

#pragma mark 字符串创建
void stringCreate() {
    
    // 1.最快的字符串创建方式    自动释放
    NSString *str = @"objective-c";
    
    NSLog(@"name=%@",str);
    
    // 2.
    NSString *str2 = [[NSString alloc] initWithString:@"a123123"];
    [str2 release];
    
    // 等价于str2
    NSString *str22  = [NSString stringWithString:@"123"];
    
    // 3.
    NSString *str3 = [[NSString alloc] initWithFormat:@" a is %d ", 10];
    NSLog(@"str3=%@",str3);
    [str3 release];
    
    NSString *str4 = [NSString stringWithFormat:@"a is %d",20];
    
    
    // 4.把C语言字符串转换成OC字符串
    char *name = "hahaha";
    NSString *str5 = [[NSString alloc] initWithUTF8String:name];
    [str5 release];
    
    // 5.从文件中读取
    NSString *path = @"/Users/hezhiyong/Desktop/学习计划安排.txt";
    NSError *error = nil; // 一定要先清空
    NSString *str6 = [[NSString alloc] initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
    // 文件读取成功, error就为nil
    // 文件读取失败, error就不为nil, error包含了详细的错误信息
    if(error) // 说明有错误
    {
        // 返回主要错误信息
        NSLog(@"文件错误信息:\n%@", [error localizedDescription]);
        
//        NSLog(@"文件读取失败:\n%@",error);
    } else {
        NSLog(@"文件读取成功:\n%@",str6);
    }
    
    NSLog(@"str6=%@", str6);
    [str6 release];
    
    // URL的格式:
    // 网络资源的协议头: http
    // 本地文件的协议头: file
    // ftp服务器资源的协议提: ftp
    
    
    // URL : 代表着一种资源, 每一个资源都有自己唯一的URL地址
//    NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
    
//    NSURL *url = [NSURL URLWithString:@"file///Users/hezhiyong/Desktop/学习计划安排.txt"];
    
    // 这里不用增加file://协议头
    NSURL *url = [NSURL fileURLWithPath:@"/Users/hezhiyong/Desktop/学习计划安排.txt"];
    
    NSString *str7 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"百度的内容是:\n%@",str7);
    
    
    
}